package main

import (
	"fmt"
	"strconv"
	"strings"
)

//字符串的常用函数
func main() {
	//golang中的编码统一为utf-8(ascii的字符(字母和数字)占一个字节，汉字占3个字节)
	str := "hello北京"
	fmt.Println("str length : ", len(str))

	//字符串中存在中文的处理方式,先将字符串转为rune切片再进行操作
	r := []rune(str)
	for i := 0; i< len(r); i++ {
		fmt.Printf("%c",r[i])
	}
	fmt.Println()

	//字符串转整数
	n, err := strconv.Atoi("123")
	if err != nil {
		fmt.Println("转换错误")
	}else {
		fmt.Println("转换后的结果为", n)
	}

	//整数转字符串
	str = strconv.Itoa(12345)
	fmt.Printf("类型为： %T, 值为：%v\n", str, str)

	//字符串转[]byte
	bytes := []byte("hello go")
	fmt.Printf("bytes=%v\n", bytes)

	//[]byte转字符串
	str = string([]byte{97, 98, 99})
	fmt.Printf("str : %v\n", str)

	//10进制数转2，8，16进制, 其中的base就是要转为的进制数
	str = strconv.FormatInt(123, 2)
	fmt.Printf("123的二进制是：%v\n", str)
	str = strconv.FormatInt(123, 16)
	fmt.Printf("123的十六进制是：%v\n", str)

	//查找子串
	b := strings.Contains("seafood", "sea")
	fmt.Printf("是否包含指定字符串：%v\n", b)

	//统计一个字符串中有几个子串
	num := strings.Count("we are the champion we", "we")
	fmt.Printf("共有%v个子串\n", num)

	//不区分大小写比较, ==区分大小写比较
	b = strings.EqualFold("abc", "AbC")
	fmt.Printf("是否相等(不区分大小写)： %v\n", b)
	fmt.Printf("是否相等(区分大小写)： %v\n", "abc" == "AbC")

	//返回子串第一次出现的index值
	index := strings.Index("we are  the champion", "are")
	fmt.Printf("idnex : %v\n", index)

	//返回子串在字符串最后一次出现的 index，如没有返回-1
	index = strings.LastIndex("we are  the champion are", "are")
	fmt.Printf("last idnex : %v\n", index)

	//将指定的子串替换成 另外一个子串: strings.Replace("go go hello", "go", "go 语言", n)
	// n 可以指 定你希望替换几个，如果 n=-1 表示全部替换
	str2 := "go go hello"
	str = strings.Replace(str2, "go", "北京", -1)
	fmt.Printf("替换后的字符串： %v\n", str)

	//分隔字符串
	strArr := strings.Split("hello,world", ",")
	for i := 0; i<len(strArr); i++{
		fmt.Printf("str[%v] = %v\n",i , strArr[i])
	}
	fmt.Println(strArr)

	//将字符串的字母进行大小写的转换
	str = "golang hello"
	fmt.Println(strings.ToLower(str))
	fmt.Println(strings.ToUpper(str))

	//将字符串左右两边的空格去掉
	str = strings.TrimSpace(" is a ")
	fmt.Println(str)

	//将字符串左右两边指定的字符去掉
	str = strings.Trim("!hello worl!d", "!")
	fmt.Println(str)

	//判断字符串是否以指定的字符串开头
	str = "this is a dream"
	fmt.Println(strings.HasPrefix(str, "there"))

	//判断字符串是否以指定的字符串结束
	fmt.Println(strings.HasSuffix(str, "there"))

}